﻿Imports CrystalDecisions.CrystalReports.Engine
Imports WiremetModel.Entities.Tracking
Imports WiremetModel.Specification.GeneralSpecifications

Public Class frmOperacja2

    Private unitOfWork As UnitOfWork

    Private mvarDbHolder As clsDataBase
    Private mvarUzytkownik As clsUzytkownik
    Private mvarPozycjaSchematu As Collection(Of clsInhTrPozycjeSchematu)
    Private mvarSchemat As clsTrSzukanie
    Private mvarDrut As clsTrSzukanie
    Private mvarSchematId As Integer
    Private mvarPozycjaSchematuId As Integer
    Private mvarPozycjaSchematuOpcjaPozycjiSchematuId As Integer
    Private mvarWyznMaterialProdukcyjny As Boolean
    Private mvarBlokowanie As clsRecordLock
    Private mvarWyznTylkoDoOdczytu As Boolean = False
    Private mvarZmianaWagi As Boolean = False

    Private mvarKomunikat As String
    Private mvarWyznPrzyciskuZmiany As Boolean = True
    Private mvarPracownikId As Integer
    Private mvarNastepnaOperacjaId As Integer
    Private mvarStatusId As Integer


    Public Sub New(PozycjaSchematu As Collection(Of clsInhTrPozycjeSchematu), PracownikId As Integer)
        ' To wywołanie jest wymagane przez projektanta.
        InitializeComponent()

        ' Dodaj inicjację po wywołaniu funkcji InitializeComponent().
        unitOfWork = New UnitOfWork()
        mvarDbHolder = New clsDataBase(VAR_CONNECTION_PARAMETERS, VAR_ERROR_HANDLER)
        mvarUzytkownik = CType(clsUzytkownik.Instance(), clsUzytkownik)
        mvarPozycjaSchematu = PozycjaSchematu
        mvarPracownikId = PracownikId

        UzupelnijDane()
        Blokowanie()

    End Sub

    Private Sub Blokowanie()

        Dim lvarZapytanie As String
        Dim lvarPracownik As New clsPracownik
        Dim lvarSzukaniePracownika As New clsSzukanie

        mvarBlokowanie = New clsRecordLock(VAR_CONNECTION_PARAMETERS, mvarPozycjaSchematuId, "tracking.pozycje_schematu", VAR_ERROR_HANDLER, CInt(mvarUzytkownik.Id))
        If Not mvarBlokowanie.RecordLocked Then
            mvarWyznTylkoDoOdczytu = True
            lvarZapytanie = "AND id = " & mvarBlokowanie.RecordLockOwner
            lvarSzukaniePracownika.SzukajPracownika(mvarDbHolder, lvarZapytanie)
            For Each lvarTmp As clsPracownik In lvarSzukaniePracownika.Pracownik
                lvarPracownik = lvarTmp
            Next
            MessageBox.Show("TYLKO DO ODCZYT." & vbNewLine & "Blokuje pracownik: " & lvarPracownik.Nazwisko, "WIREMET")
            grbTylkoDoOdczytu.Visible = True
            grbPrzyciski.Enabled = False
        End If

    End Sub


#Region "Pobierz"

    Private Sub PobierzWszystkieMaszyny()

        Dim lvarDataTable As New DataTable

        lvarDataTable = clsMaszyna.PobierzWszystkieMaszyny(mvarDbHolder, VAR_ERROR_HANDLER)

        If Not lvarDataTable Is Nothing Then
            For Each lvarRow As DataRow In lvarDataTable.Rows
                cmbMaszyna.Items.Add(New clsMaszyna(CInt(lvarRow("id")), CInt(IIf(IsDBNull(lvarRow("numer")), String.Empty, lvarRow("numer"))), CStr(IIf(IsDBNull(lvarRow("nazwa")), String.Empty, lvarRow("nazwa"))), CStr(IIf(IsDBNull(lvarRow("opis")), String.Empty, lvarRow("opis"))), CDbl(IIf(IsDBNull(lvarRow("wydluzenie_1")), -1, lvarRow("wydluzenie_2"))), CDbl(IIf(IsDBNull(lvarRow("wydluzenie_2")), -1, lvarRow("wydluzenie_2"))), CInt(IIf(IsDBNull(lvarRow("grupa_maszyny_id")), -1, lvarRow("grupa_maszyny_id"))), CInt(IIf(IsDBNull(lvarRow("ilosc_kamieni")), -1, lvarRow("ilosc_kamieni")))))
            Next
        End If

    End Sub

    Private Sub PobierzWszystkieMaszynyGrupy(Id As Integer)

        Dim lvarDataTable As New DataTable

        lvarDataTable = clsInhMaszyna.PobierzWszystkieMaszynyGrupy(mvarDbHolder, Id)

        If Not lvarDataTable Is Nothing Then
            For Each lvarRow As DataRow In lvarDataTable.Rows
                cmbMaszyna.Items.Add(New clsMaszyna(CInt(lvarRow("id")), CInt(IIf(IsDBNull(lvarRow("numer")), String.Empty, lvarRow("numer"))), CStr(IIf(IsDBNull(lvarRow("nazwa")), String.Empty, lvarRow("nazwa"))), CStr(IIf(IsDBNull(lvarRow("opis")), String.Empty, lvarRow("opis"))), CDbl(IIf(IsDBNull(lvarRow("wydluzenie_1")), -1, lvarRow("wydluzenie_2"))), CDbl(IIf(IsDBNull(lvarRow("wydluzenie_2")), -1, lvarRow("wydluzenie_2"))), CInt(IIf(IsDBNull(lvarRow("grupa_maszyny_id")), -1, lvarRow("grupa_maszyny_id"))), CInt(IIf(IsDBNull(lvarRow("ilosc_kamieni")), -1, lvarRow("ilosc_kamieni")))))
            Next
        End If

    End Sub

    Private Sub PobierzWszystkichPracownikow()

        Dim lvarDataTable As New DataTable

        lvarDataTable = clsPracownik.PobierzWszystkichPracownikow(mvarDbHolder, VAR_ERROR_HANDLER)

        If Not lvarDataTable Is Nothing Then
            For Each lvarRow As DataRow In lvarDataTable.Rows
                If CBool(lvarRow("aktywny")) Then
                    cmbPracownik.Items.Add(New clsPracownik(lvarRow("id").ToString(), CStr(IIf(IsDBNull(lvarRow("numer")), String.Empty, lvarRow("numer"))), CStr(IIf(IsDBNull(lvarRow("imie")), String.Empty, lvarRow("imie"))), CStr(IIf(IsDBNull(lvarRow("nazwisko")), String.Empty, lvarRow("nazwisko"))), CStr(IIf(IsDBNull(lvarRow("login")), String.Empty, lvarRow("login"))), CStr(IIf(IsDBNull(lvarRow("haslo")), String.Empty, lvarRow("haslo"))), CBool(IIf(IsDBNull(lvarRow("aktywny")), String.Empty, lvarRow("aktywny")))))
                End If
            Next
        End If

    End Sub

    Private Sub PobierzWszystkieOpakowania()

        Dim lvarDataTable As New DataTable

        lvarDataTable = clsPakowanie.PobierzWszystkieOpcje(mvarDbHolder, VAR_ERROR_HANDLER)

        If Not lvarDataTable Is Nothing Then
            For Each lvarRow As DataRow In lvarDataTable.Rows
                cmbPakowanie.Items.Add(New clsPakowanie(lvarRow("id").ToString(), CType(IIf(IsDBNull(lvarRow("nazwa")), String.Empty, lvarRow("nazwa")), String), CType(IIf(IsDBNull(lvarRow("cena")), 0, lvarRow("cena")), Double), CType(IIf(IsDBNull(lvarRow("waga")), 0, lvarRow("waga")), Double)))
            Next
        End If

    End Sub

#End Region


    Private Sub Wyczysc()

        txtTemperatura.Text = String.Empty
        txtPredkoscMaszyny.Text = String.Empty
        txtWymiarMin.Text = String.Empty
        txtWymiarMax.Text = String.Empty
        txtUwagi.Text = String.Empty
        chkProdukcja.Checked = False
        chkMagazyn.Checked = False
        chkKosz.Checked = False
        chkKontrola.Checked = False
        If dgvWaga.Rows.Count > 0 Then
            dgvWaga.Rows.Clear()
        End If
        grbInformacje.Enabled = False
        cmdDodaj.Enabled = True
        grbWaga.Text = "waga"

    End Sub

    Private Sub AktywnoscGrbDaneMaszyny()

        grbInformacje.Enabled = True
        If UCase(Trim(txtMaszyna.Text)) = "PIEC" Then
            txtTemperatura.Enabled = True
            txtPredkoscMaszyny.Enabled = False
        Else
            txtTemperatura.Enabled = False
            txtPredkoscMaszyny.Enabled = True
        End If

    End Sub


    Function SprawdzPodaneLiczby() As Boolean

        Dim lvarWyzn As Boolean
        Dim lvarParametMaszyny As String

        If UCase(txtMaszyna.Text) = "PIEC" Then
            lvarParametMaszyny = txtTemperatura.Text
        Else
            lvarParametMaszyny = txtPredkoscMaszyny.Text
        End If

        If txtWymiarMin.Text <> String.Empty AndAlso IsNumeric(txtWymiarMin.Text) AndAlso txtWymiarMax.Text <> String.Empty AndAlso IsNumeric(txtWymiarMax.Text) AndAlso lvarParametMaszyny <> String.Empty AndAlso IsNumeric(lvarParametMaszyny) Then
            If CDbl(txtWymiarMin.Text) > 0.0 AndAlso CDbl(txtWymiarMax.Text) > 0.0 AndAlso CDbl(lvarParametMaszyny) > 0.0 Then
                lvarWyzn = True
            Else
                lvarWyzn = False
            End If
        Else
            lvarWyzn = False
        End If

        If Not chkProdukcja.Checked AndAlso Not chkMagazyn.Checked AndAlso Not chkKosz.Checked AndAlso Not chkKontrola.Checked Then
            lvarWyzn = False
        End If

        For Each lvarRow As DataGridViewRow In dgvWaga.Rows
            If CDbl(lvarRow.Cells("colWagaIlosc").Value) = 0.0 Then
                lvarWyzn = False
                Exit For
            End If
        Next

        Return lvarWyzn

    End Function


    Function ObliczWageRodzica(Drut As clsInhTrDrut) As Double

        Dim lvarReturn As Double

        For Each lvarDrut As clsTrRodzic In Drut.Rodzic
            lvarReturn = lvarReturn + CDbl(lvarDrut.Waga)
        Next
        Return lvarReturn

    End Function
    'MATERIAL PRODUKCYJNY
    Function ObliczAktualnaWageRodzica(Drut As clsInhTrMaterialProdukcyjny, WyznZmiany As Boolean) As Double

        Dim lvarReturn1 As Double
        Dim lvarReturn2 As Double

        lvarReturn1 = lvarReturn1 + CDbl(CType(Drut, clsInhTrMaterialProdukcyjny).Ilosc)

        For Each lvarRow As DataGridViewRow In dgvDrutPotomek.Rows
            For Each lvarDrut As clsTrRodzic In CType(lvarRow.Tag, clsInhTrDrut).Rodzic
                If lvarDrut.DrutRodzicId = Drut.Id Then
                    lvarReturn2 = lvarReturn2 + CDbl(Replace(lvarDrut.Waga, ".", ","))
                End If
            Next
        Next

        If WyznZmiany Then
            For Each lvarDrut As clsTrRodzic In CType(dgvDrutPotomek.SelectedRows(0).Tag, clsInhTrDrut).Rodzic 'lstPotomek.SelectedItem.Rodzic
                If lvarDrut.DrutRodzicId = Drut.Id Then
                    lvarReturn2 = lvarReturn2 - CDbl(lvarDrut.Waga)
                End If
            Next
        End If

        Return lvarReturn1 - lvarReturn2

    End Function
    'DRUT
    Function ObliczAktualnaWageRodzica(Drut As clsInhTrDrut, WyznZmiany As Boolean) As Double

        Dim lvarReturn1 As Double
        Dim lvarReturn2 As Double

        For Each lvarDrut As clsTrRodzic In Drut.Rodzic
            lvarReturn1 = lvarReturn1 + CDbl(Replace(lvarDrut.Waga, ".", ","))
        Next

        For Each lvarRow As DataGridViewRow In dgvDrutPotomek.Rows
            For Each lvarDrut As clsTrRodzic In CType(lvarRow.Tag, clsInhTrDrut).Rodzic
                If lvarDrut.DrutRodzicId = Drut.Id Then
                    lvarReturn2 = lvarReturn2 + CDbl(Replace(lvarDrut.Waga, ".", ","))
                End If
            Next
        Next

        If WyznZmiany Then
            For Each lvarDrut As clsTrRodzic In CType(dgvDrutPotomek.SelectedRows(0).Tag, clsInhTrDrut).Rodzic 'lstPotomek.SelectedItem.Rodzic
                If lvarDrut.DrutRodzicId = Drut.Id Then
                    lvarReturn2 = lvarReturn2 - CDbl(Replace(lvarDrut.Waga, ".", ","))
                End If
            Next
        End If

        Return lvarReturn1 - lvarReturn2

    End Function

    Function ObliczWagePotomkow() As Double

        Dim lvarReturn2 As Double

        For Each lvarRow As DataGridViewRow In dgvDrutPotomek.Rows
            For Each lvarDrut As clsTrRodzic In CType(lvarRow.Tag, clsInhTrDrut).Rodzic
                lvarReturn2 = lvarReturn2 + CDbl(lvarDrut.Waga)
            Next
        Next

        Return lvarReturn2

    End Function


    Private Sub DodanieDoDgvWagi()

        If mvarWyznMaterialProdukcyjny Then
            dgvWaga.Rows.Add(CType(dgvDrutRodzic.SelectedRows(0).Tag, clsInhTrMaterialProdukcyjny).Id, 0, dgvDrutRodzic.SelectedRows(0).Cells("colRodzicAktualnaWaga").Value, 0)
            dgvWaga.Rows(dgvWaga.Rows.Count - 1).Tag = dgvDrutRodzic.SelectedRows(0).Tag
        Else
            dgvWaga.Rows.Add(CType(dgvDrutRodzic.SelectedRows(0).Tag, clsInhTrDrut).Id, 0, dgvDrutRodzic.SelectedRows(0).Cells("colRodzicAktualnaWaga").Value, 0)
            dgvWaga.Rows(dgvWaga.Rows.Count - 1).Tag = dgvDrutRodzic.SelectedRows(0).Tag
        End If

    End Sub

    Private Sub UzupelnijDane()

        Dim lvarIndex As Integer
        Dim lvarWaga As Double
        Dim lvarAktualnaWaga As Double

        txtIlosc.Text = "0,00"

        For Each lvarPozycja As clsInhTrPozycjeSchematu In mvarPozycjaSchematu
            Select Case lvarPozycja.StatusId
                Case 1 ' nowe
                    Me.Text = Me.Text & " - nieropoczęta"
                Case 4 'w produkcji
                    Me.Text = Me.Text & " -  w produkcji"
                Case 6 'zakonczone
                    Me.Text = Me.Text & " - zakończona"
                    dgvDrutRodzic.Enabled = False
                    grbInformacje.Enabled = False
                    cmdZakonczOperacje.Enabled = False
            End Select
            mvarStatusId = lvarPozycja.StatusId
            grbSchemat.Text = "Schemat o numerze " & lvarPozycja.SchematId & " - numer operacji " & lvarPozycja.Id
            For Each lvarMaszyna As clsInhTrMaszynaPozycjiSchematu In lvarPozycja.Maszyny
                txtMaszyna.Text = txtMaszyna.Text & lvarMaszyna.Maszyna.Nazwa
            Next
            txtWymiarWejsciowy.Text = lvarPozycja.WymiarWejsciowy
            txtWymiarKoncowy.Text = lvarPozycja.WymiarKoncowy
            txtOpakowanie.Text = lvarPozycja.Pakowanie.Nazwa
            If lvarPozycja.GrupaMaszynyId <> "null" Then
                PobierzWszystkieMaszynyGrupy(CInt(lvarPozycja.GrupaMaszynyId))
            End If
            mvarSchematId = CInt(lvarPozycja.SchematId)
            mvarPozycjaSchematuId = lvarPozycja.Id
            mvarPozycjaSchematuOpcjaPozycjiSchematuId = lvarPozycja.OpcjaPozycjiSchematuId
        Next

        If mvarPozycjaSchematuOpcjaPozycjiSchematuId = 3 Then 'jezeli pozycja jest poprawa to nalezy odpowiedniu przygotować formularz
            PobierzWszystkieMaszyny()
            cmbMaszyna.SelectedIndex = 0
        End If

        'Uzupelnienie listy drutow-potomek
        UzupelnijListeDrutowPotomkowych()

        'Szukanie poprzedzajacej pozycji schematu
        mvarDrut = New clsTrSzukanie
        mvarDrut.SzukajIdPozycjiSchematu(mvarDbHolder, mvarPozycjaSchematuId, mvarSchematId)
        For i As Integer = 0 To mvarDrut.PozycjeSchematuIdTab.Rows.Count - 1
            If CInt(mvarDrut.PozycjeSchematuIdTab.Rows(i)("id")) = mvarPozycjaSchematuId And i <> 0 Then
                If i = mvarDrut.PozycjeSchematuIdTab.Rows.Count - 1 Then
                    mvarNastepnaOperacjaId = 0
                Else
                    mvarNastepnaOperacjaId = CInt(mvarDrut.PozycjeSchematuIdTab.Rows(i + 1)("id"))
                End If
                lvarIndex = i - 1
                Exit For
            End If
        Next

        'Uzupelnienie listy drutow-rodzic
        If lvarIndex = 0 Then
            mvarDrut.SzukajDrutuRodzica1(mvarDbHolder, mvarSchematId.ToString())
            If mvarDrut.MaterialProdukcyjny.Count = 0 Then
                MessageBox.Show("Nie ma jeszcze drutu do przeprowadzenia danej operacji.", "WIREMET")
            Else
                For Each lvarDrutRodzic As clsInhTrMaterialProdukcyjny In mvarDrut.MaterialProdukcyjny
                    dgvDrutRodzic.Rows.Add(dgvDrutRodzic.Rows.Count + 1, lvarDrutRodzic.Id, CType(lvarDrutRodzic.DataUtworzenia, Date).ToShortDateString, lvarDrutRodzic.Pracownik.Nazwisko, lvarDrutRodzic.Pakowanie.Nazwa, "magazyn", lvarDrutRodzic.WymiarMin, lvarDrutRodzic.WymiarMax, lvarDrutRodzic.Ilosc, Format(ObliczAktualnaWageRodzica(lvarDrutRodzic, False), "###0.000"), String.Empty)
                    dgvDrutRodzic.Rows(dgvDrutRodzic.Rows.Count - 1).Tag = lvarDrutRodzic
                    txtIlosc.Text = CStr(CDbl(txtIlosc.Text) + CDbl(lvarDrutRodzic.Ilosc))
                Next
                mvarWyznMaterialProdukcyjny = True
            End If
        Else
            mvarDrut.SzukajDrutuRodzica2(mvarDbHolder, CStr(mvarDrut.PozycjeSchematuIdTab.Rows(lvarIndex)("id")), False)
            If mvarDrut.Drut.Count = 0 Then
                MessageBox.Show("Nie ma jeszcze drutu do przeprowadzenia danej operacji.", "WIREMET")
            Else
                If mvarPozycjaSchematuOpcjaPozycjiSchematuId = 3 Then 'sprawdzenie czy dana pozycja jest poparwa
                    For Each lvarDrutRodzic As clsInhTrDrut In mvarDrut.Drut
                        If lvarDrutRodzic.OpcjaId = 1 Then
                            If lvarDrutRodzic.Kontrola.OpcjaId = 5 Then
                                lvarWaga = ObliczWageRodzica(lvarDrutRodzic)
                                lvarAktualnaWaga = ObliczAktualnaWageRodzica(lvarDrutRodzic, False)
                                dgvDrutRodzic.Rows.Add(dgvDrutRodzic.Rows.Count + 1, lvarDrutRodzic.Id, lvarDrutRodzic.Pracownik.Nazwisko, lvarDrutRodzic.Pakowanie.Nazwa, lvarDrutRodzic.Maszyna.Nazwa, lvarDrutRodzic.WymiarMin, lvarDrutRodzic.WymiarMax, lvarWaga, Format(lvarAktualnaWaga, "###0.000"), lvarDrutRodzic.Uwagi)
                                dgvDrutRodzic.Rows(dgvDrutRodzic.Rows.Count - 1).Tag = lvarDrutRodzic

                                txtIlosc.Text = CStr(CDbl(txtIlosc.Text) + lvarWaga)
                            End If
                        End If
                    Next
                Else
                    For Each lvarDrutRodzic As clsInhTrDrut In mvarDrut.Drut
                        If lvarDrutRodzic.OpcjaId = 1 Then
                            lvarWaga = ObliczWageRodzica(lvarDrutRodzic)
                            lvarAktualnaWaga = ObliczAktualnaWageRodzica(lvarDrutRodzic, False)
                            dgvDrutRodzic.Rows.Add(dgvDrutRodzic.Rows.Count + 1, lvarDrutRodzic.Id, CType(lvarDrutRodzic.DataUtworzenia, Date).ToShortDateString, lvarDrutRodzic.Pracownik.Nazwisko, lvarDrutRodzic.Pakowanie.Nazwa, lvarDrutRodzic.Maszyna.Nazwa, lvarDrutRodzic.WymiarMin, lvarDrutRodzic.WymiarMax, lvarWaga, Format(lvarAktualnaWaga, "###0.000"), lvarDrutRodzic.Uwagi)
                            dgvDrutRodzic.Rows(dgvDrutRodzic.Rows.Count - 1).Tag = lvarDrutRodzic

                            txtIlosc.Text = CStr(CDbl(txtIlosc.Text) + lvarWaga)
                        End If
                    Next
                End If

                mvarWyznMaterialProdukcyjny = False
            End If
        End If

        'lblLiczba1.Text = Replace(clsInhTrDrut.PobierzIloscDrutu(mvarDbHolder, mvarPozycjaSchematuId), ".", ",") & " / " & Replace(txtIlosc.Text, ".", ",")
        SetLabelIloscDrutu()

        PobierzWszystkichPracownikow()
        PobierzWszystkieOpakowania()

        If mvarPracownikId <> 0 Then
            For I As Integer = 0 To cmbPracownik.Items.Count - 1
                If CInt(CType(cmbPracownik.Items(I), clsPracownik).Numer) = mvarPracownikId Then
                    Me.Text = Me.Text & " - zalogowany(a): " & CType(cmbPracownik.Items(I), clsPracownik).Nazwisko
                    Exit For
                End If
            Next
        End If

    End Sub

    Private Sub UzupelnijListeDrutowPotomkowych()

        Dim lvarWaga As Double
        Dim lvarCalkowitaWaga As Double

        mvarDrut = New clsTrSzukanie
        mvarDrut.SzukajDrutuRodzica2(mvarDbHolder, mvarPozycjaSchematuId.ToString(), False)

        If mvarDrut.Drut.Count <> 0 Then
            For Each lvarDrutPotomek As clsInhTrDrut In mvarDrut.Drut
                For Each lvarTmp As clsTrRodzic In lvarDrutPotomek.Rodzic
                    lvarWaga = lvarWaga + CDbl(lvarTmp.Waga)
                Next
                dgvDrutPotomek.Rows.Add(dgvDrutPotomek.Rows.Count + 1, lvarDrutPotomek.Id, CType(lvarDrutPotomek.DataUtworzenia, Date).ToShortDateString, lvarDrutPotomek.Pracownik.Nazwisko, lvarDrutPotomek.Pakowanie.Nazwa, lvarDrutPotomek.Maszyna.Nazwa, lvarDrutPotomek.WymiarMin, lvarDrutPotomek.WymiarMax, lvarWaga, lvarDrutPotomek.Opcja.Nazwa, lvarDrutPotomek.Uwagi)
                dgvDrutPotomek.Rows(dgvDrutPotomek.Rows.Count - 1).Tag = lvarDrutPotomek
                lvarCalkowitaWaga = lvarCalkowitaWaga + lvarWaga
                lvarWaga = 0
            Next
        End If
        'lblLiczba1.Text = lvarCalkowitaWaga & " / " & Replace(txtIlosc.Text, ".", ",")
        SetLabelIloscDrutu()
    End Sub


    Private Sub Dodaj()

        Dim lvarOpcja As String

        mvarDbHolder.BeginTrans()
        Dim lvarDrut As New clsInhTrDrut()
        With lvarDrut
            .DataUtworzenia = Now.Date
            .PozycjeSchematuProdukcjiId = mvarPozycjaSchematuId
            .PracownikId = CInt(CType(cmbPracownik.SelectedItem, clsPracownik).Id)
            .Pracownik.Nazwisko = CType(cmbPracownik.SelectedItem, clsPracownik).Nazwisko
            .MaszynaId = CType(cmbMaszyna.SelectedItem, clsMaszyna).Id
            .PakowanieId = CInt(CType(cmbPakowanie.SelectedItem, clsPakowanie).Id)
            .Pakowanie.Nazwa = CType(cmbPakowanie.SelectedItem, clsPakowanie).Nazwa
            .WymiarMin = Replace(txtWymiarMin.Text, ",", ".")
            .WymiarMax = Replace(txtWymiarMax.Text, ",", ".")
            .Uwagi = txtUwagi.Text
            If UCase(txtMaszyna.Text) = "PIEC" Then
                .ParametrMaszyny = Replace(txtTemperatura.Text, ",", ".")
            Else
                .ParametrMaszyny = Replace(txtPredkoscMaszyny.Text, ",", ".")
            End If
            If chkProdukcja.Checked Then
                .OpcjaId = 1
                lvarOpcja = "produkcja"
            ElseIf chkMagazyn.Checked Then
                .OpcjaId = 2
                lvarOpcja = "magazyn"
            ElseIf chkKosz.Checked Then
                .OpcjaId = 3
                lvarOpcja = "kosz"
            Else
                .OpcjaId = 4
                lvarOpcja = "kontrola"
            End If
        End With

        Dim lvarWaga As Double

        For Each lvarRow As DataGridViewRow In dgvWaga.Rows
            If CDbl(lvarRow.Cells("colWagaIlosc").Value) <> 0 Then
                Dim lvarRodzic As New clsTrRodzic()
                With lvarRodzic
                    If mvarWyznMaterialProdukcyjny Then
                        .WyznMaterialProdukcyjny = True
                        .DrutRodzicId = CInt(lvarRow.Cells("colWagaNumer").Value)
                    Else
                        .WyznMaterialProdukcyjny = False
                        .DrutRodzicId = CType(lvarRow.Tag, clsInhTrDrut).Id
                    End If
                    .Waga = Replace(lvarRow.Cells("colWagaIlosc").Value.ToString(), ",", ".")
                    lvarWaga = lvarWaga + CDbl(lvarRow.Cells("colWagaIlosc").Value)
                End With
                lvarDrut.Rodzic.Add(lvarRodzic)
            End If
        Next

        lvarDrut.Save(mvarDbHolder)


        For Each lvarPozycja As clsInhTrPozycjeSchematu In mvarPozycjaSchematu
            lvarPozycja.StatusId = 4
            lvarPozycja.Save(mvarDbHolder)
        Next

        mvarDbHolder.CommitTrans()

        dgvDrutPotomek.Rows.Add(dgvDrutPotomek.Rows.Count + 1, lvarDrut.Id, CType(lvarDrut.DataUtworzenia, Date).ToShortDateString, CType(cmbPracownik.SelectedItem, clsPracownik).Nazwisko, CType(cmbPakowanie.SelectedItem, clsPakowanie).Nazwa, CType(cmbMaszyna.SelectedItem, clsMaszyna).Nazwa, lvarDrut.WymiarMin, lvarDrut.WymiarMax, lvarWaga, lvarOpcja, lvarDrut.Uwagi)
        dgvDrutPotomek.Rows(dgvDrutPotomek.Rows.Count - 1).Tag = lvarDrut

        For Each lvarRow As DataGridViewRow In dgvWaga.Rows
            For Each lvarRow2 As DataGridViewRow In dgvDrutRodzic.Rows
                If CInt(lvarRow.Cells("colWagaNumer").Value) = CInt(lvarRow2.Cells("colRodzicNumer").Value) Then
                    lvarRow2.Cells("colRodzicAktualnaWaga").Value = CDbl(lvarRow2.Cells("colRodzicAktualnaWaga").Value) - CDbl(lvarRow.Cells("colWagaIlosc").Value)
                End If
            Next
        Next

        'lblLiczba1.Text = Replace(clsInhTrDrut.PobierzIloscDrutu(mvarDbHolder, mvarPozycjaSchematuId), ".", ",") & " / " & Replace(txtIlosc.Text, ".", ",")
        lbl_IloscDrutu.Text = clsInhTrDrut.PobierzIloscDrutu(mvarDbHolder, mvarPozycjaSchematuId) & " / " & txtIlosc.Text
        'SetLabelIloscDrutu()

        If Not chkKosz.Checked Then
            Drukuj(clsTrSzukanie.SzukajMaterialuProdukcyjnegoPotomka(mvarDbHolder, lvarDrut.Id.ToString()), lvarDrut.Id)
        End If
        Wyczysc()


    End Sub

    Private Sub Zmien()

        mvarDbHolder.BeginTrans()

        If Not mvarZmianaWagi Then
            For Each lvarRow As DataGridViewRow In dgvWaga.Rows
                For Each lvarRow2 As DataGridViewRow In dgvDrutRodzic.Rows
                    If CInt(lvarRow.Cells("colWagaNumer").Value) = CInt(lvarRow2.Cells("colRodzicNumer").Value) Then
                        lvarRow2.Cells("colRodzicAktualnaWaga").Value = CDbl(lvarRow2.Cells("colRodzicAktualnaWaga").Value) + CDbl(dgvDrutPotomek.SelectedRows(0).Cells("colPotomekWaga").Value) - CDbl(lvarRow.Cells("colWagaIlosc").Value)
                    End If
                Next
            Next
        Else
            For Each lvarRow As DataGridViewRow In dgvWaga.Rows
                For Each lvarRow2 As DataGridViewRow In dgvDrutRodzic.Rows
                    If CInt(lvarRow.Cells("colWagaNumer").Value) = CInt(lvarRow2.Cells("colRodzicNumer").Value) Then
                        lvarRow2.Cells("colRodzicAktualnaWaga").Value = CDbl(lvarRow2.Cells("colRodzicAktualnaWaga").Value) - CDbl(lvarRow.Cells("colWagaIlosc").Value)
                    End If
                Next
            Next


            mvarZmianaWagi = False
        End If
        With CType(dgvDrutPotomek.SelectedRows(0).Tag, clsInhTrDrut)
            .PozycjeSchematuProdukcjiId = mvarPozycjaSchematuId
            .PracownikId = CInt(CType(cmbPracownik.SelectedItem, clsPracownik).Id)
            .MaszynaId = CType(cmbMaszyna.SelectedItem, clsMaszyna).Id
            .PakowanieId = CInt(CType(cmbPakowanie.SelectedItem, clsPakowanie).Id)
            .WymiarMin = Replace(txtWymiarMin.Text, ",", ".")
            .WymiarMax = Replace(txtWymiarMax.Text, ",", ".")
            .Uwagi = txtUwagi.Text
            If UCase(txtMaszyna.Text) = "PIEC" Then
                .ParametrMaszyny = Replace(txtTemperatura.Text, ",", ".")
            Else
                .ParametrMaszyny = Replace(txtPredkoscMaszyny.Text, ",", ".")
            End If
            If chkProdukcja.Checked Then
                .OpcjaId = 1
            ElseIf chkMagazyn.Checked Then
                .OpcjaId = 2
            ElseIf chkKosz.Checked Then
                .OpcjaId = 3
            Else
                .OpcjaId = 4
            End If
        End With

        For Each lvarPozycja As clsTrRodzic In CType(dgvDrutPotomek.SelectedRows(0).Tag, clsInhTrDrut).Rodzic
            CType(dgvDrutPotomek.SelectedRows(0).Tag, clsInhTrDrut).RodzicDel.Add(lvarPozycja)
        Next
        CType(dgvDrutPotomek.SelectedRows(0).Tag, clsInhTrDrut).Rodzic.Clear()
        For i As Integer = 0 To dgvWaga.Rows.Count - 1
            Dim lvarRodzic As New clsTrRodzic()
            With lvarRodzic
                If mvarWyznMaterialProdukcyjny Then
                    .WyznMaterialProdukcyjny = True
                    .DrutRodzicId = CType(dgvWaga.Rows(i).Tag, clsInhTrMaterialProdukcyjny).Id
                Else
                    .WyznMaterialProdukcyjny = False
                    .DrutRodzicId = CType(dgvWaga.Rows(i).Tag, clsInhTrDrut).Id
                End If
                .Waga = Replace(CStr(dgvWaga.Rows(i).Cells("colWagaIlosc").Value), ",", ".")
            End With
            CType(dgvDrutPotomek.SelectedRows(0).Tag, clsInhTrDrut).Rodzic.Add(lvarRodzic)
        Next

        CType(dgvDrutPotomek.SelectedRows(0).Tag, clsInhTrDrut).Save(mvarDbHolder)

        mvarDbHolder.CommitTrans()

        Drukuj(clsTrSzukanie.SzukajMaterialuProdukcyjnegoPotomka(mvarDbHolder, CType(dgvDrutPotomek.SelectedRows(0).Tag, clsInhTrDrut).Id.ToString()), CType(dgvDrutPotomek.SelectedRows(0).Tag, clsInhTrDrut).Id)
        Wyczysc()
        dgvDrutPotomek.Rows.Clear()
        dgvDrutRodzic.ClearSelection()
        UzupelnijListeDrutowPotomkowych()

        'lblLiczba1.Text = Replace(clsInhTrDrut.PobierzIloscDrutu(mvarDbHolder, mvarPozycjaSchematuId), ".", ",") & " / " & Replace(txtIlosc.Text, ".", ",")
        SetLabelIloscDrutu()

    End Sub

    Private Sub Drukuj(IdMaterialuProdykcyjnego As Integer, IdDrut As Integer)
        Try
            Dim etykietaProdukcja As New EtykietaProdukcjaReport()

            etykietaProdukcja.SetParameterValue("p_id", IdMaterialuProdykcyjnego)
            etykietaProdukcja.SetParameterValue("p_id_drut", IdDrut)
            etykietaProdukcja.SetParameterValue("p_numer_operacji", mvarNastepnaOperacjaId.ToString())

            etykietaProdukcja.PrintToPrinter(1, False, 0, 0)

        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

    End Sub

    Private Sub Usun()

        If dgvDrutPotomek.SelectedRows.Count > 0 Then

            For Each lvarRow As DataGridViewRow In dgvWaga.Rows
                For Each lvarRow2 As DataGridViewRow In dgvDrutRodzic.Rows
                    If CInt(lvarRow.Cells("colWagaNumer").Value) = CInt(lvarRow2.Cells("colRodzicNumer").Value) Then
                        lvarRow2.Cells("colRodzicAktualnaWaga").Value = CDbl(lvarRow2.Cells("colRodzicAktualnaWaga").Value) + CDbl(lvarRow.Cells("colWagaIlosc").Value)
                    End If
                Next
            Next


            mvarDbHolder.BeginTrans()
            CType(dgvDrutPotomek.SelectedRows(0).Tag, clsInhTrDrut).Delete(mvarDbHolder)
            mvarDbHolder.CommitTrans()



            'lblLiczba1.Text = Replace(clsInhTrDrut.PobierzIloscDrutu(mvarDbHolder, mvarPozycjaSchematuId), ".", ",") & " / " & Replace(txtIlosc.Text, ".", ",")
            SetLabelIloscDrutu()

            Wyczysc()
            dgvDrutPotomek.Rows.Clear()
            UzupelnijListeDrutowPotomkowych()
            dgvDrutRodzic.ClearSelection()
            dgvDrutPotomek.ClearSelection()

        End If

    End Sub


    Private Sub cmdDodaj_Click(sender As Object, e As EventArgs) Handles cmdDodaj.Click

        If SprawdzPodaneLiczby() Then
            Dodaj()
        Else
            MessageBox.Show("Podaj wszystkie dane poprawnie.", "WIREMET")
        End If

    End Sub

    Private Sub cmdZmien_Click(sender As Object, e As EventArgs) Handles cmdZmien.Click

        mvarWyznPrzyciskuZmiany = True
        If dgvDrutPotomek.SelectedRows.Count > 0 Then
            If SprawdzPodaneLiczby() Then
                Zmien()
            Else
                MessageBox.Show("Podaj wszystkie dane poprawnie.", "WIREMET")
            End If
        Else
            MessageBox.Show("Wybierz drut-potomek.", "WIREMET")
        End If

    End Sub

    Private Sub cmdUsun_Click(sender As Object, e As EventArgs) Handles cmdUsun.Click
        If dgvDrutPotomek.SelectedRows.Count > 0 Then
            Usun()
        Else
            MessageBox.Show("Wybierz drut-potomek", "WIEREMET")
        End If
    End Sub

    Private Sub cmdDrukuj_Click(sender As Object, e As EventArgs) Handles cmdDrukuj.Click

        If dgvDrutPotomek.SelectedRows.Count > 0 Then
            Drukuj(clsTrSzukanie.SzukajMaterialuProdukcyjnegoPotomka(mvarDbHolder, CType(dgvDrutPotomek.SelectedRows(0).Tag, clsInhTrDrut).Id.ToString()), CType(dgvDrutPotomek.SelectedRows(0).Tag, clsInhTrDrut).Id)
        Else
            MessageBox.Show("Wybierz drut-potomek.", "WIREMET")
        End If

    End Sub

    Private Sub cmdSchemat_Click(sender As Object, e As EventArgs) Handles cmdSchemat.Click

        Dim lvarCommand As String
        Dim lvarKlient As String
        Dim lvarTermin As String
        Dim lvarPozycjaZleceniaId As Integer
        lvarCommand = "AND schemat.id = " & mvarSchematId

        mvarSchemat = New clsTrSzukanie
        mvarSchemat.SzukajSchematu(mvarDbHolder, lvarCommand)

        For Each lvarRow As DataRow In mvarSchemat.SchematTab.Rows
            lvarKlient = lvarRow.Item("klient").ToString()
            lvarTermin = CType(lvarRow.Item("termin"), Date).ToShortDateString
            lvarPozycjaZleceniaId = CInt(lvarRow.Item("pozycja_zlecenia_id"))
        Next


        Dim lvarFrm As New frmTrPozycjaZlecenia(lvarKlient, lvarTermin, lvarPozycjaZleceniaId, mvarSchematId, mvarPozycjaSchematuId, True, False)
        With lvarFrm
            .ShowDialog()
        End With

    End Sub

    Private Sub cmdWyczysc_Click(sender As Object, e As EventArgs) Handles cmdWyczysc.Click

        If dgvDrutRodzic.SelectedRows.Count > 0 Then
            dgvDrutRodzic.ClearSelection()
        End If
        If dgvDrutPotomek.SelectedRows.Count > 0 Then
            dgvDrutPotomek.ClearSelection()
        End If
        If dgvWaga.Rows.Count > 0 Then
            dgvWaga.Rows.Clear()
        End If
        Wyczysc()

    End Sub


    Private Sub dgvDrutRodzic_CellMouseClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles dgvDrutRodzic.CellMouseClick

        Dim lvarIndex As Integer
        dgvDrutRodzic.Enabled = True
        grbInformacje.Enabled = True
        grbPrzyciski.Enabled = True
        If CDbl(dgvDrutRodzic.SelectedRows(0).Cells("colRodzicAktualnaWaga").Value) <> 0 Then
            If dgvDrutRodzic.SelectedRows.Count > 0 And dgvDrutRodzic.SelectedRows.Count > dgvWaga.Rows.Count Then
                Select Case dgvDrutRodzic.SelectedRows.Count
                    Case 1
                        Wyczysc()
                        If mvarPracownikId <> 0 Then
                            For I As Integer = 0 To cmbPracownik.Items.Count - 1
                                If CInt(CType(cmbPracownik.Items(I), clsPracownik).Numer) = mvarPracownikId Then
                                    cmbPracownik.SelectedIndex = I
                                    Exit For
                                End If
                            Next
                        Else
                            lvarIndex = cmbPracownik.FindString(mvarUzytkownik.Nazwisko)
                            cmbPracownik.SelectedIndex = lvarIndex
                        End If
                        lvarIndex = cmbMaszyna.FindString(txtMaszyna.Text)
                        cmbMaszyna.SelectedIndex = lvarIndex
                        lvarIndex = cmbPakowanie.FindString(txtOpakowanie.Text)
                        cmbPakowanie.SelectedIndex = lvarIndex
                        AktywnoscGrbDaneMaszyny()
                        'waga
                        DodanieDoDgvWagi()
                    Case Is > 1
                        DodanieDoDgvWagi()
                End Select
            ElseIf dgvDrutRodzic.SelectedRows.Count < dgvWaga.Rows.Count Then

                For Each lvarRow As DataGridViewRow In dgvWaga.Rows
                    '  MessageBox.Show("waga " & lvarRow.Cells("colWagaNumer").Value)
                    For Each lvarRow2 As DataGridViewRow In dgvDrutRodzic.Rows
                        '   MessageBox.Show("Rodzic " & lvarRow2.Cells("colRodzicNumer").Value)
                        If CInt(lvarRow2.Cells("colRodzicNumer").Value) = CInt(lvarRow.Cells("colWagaNumer").Value) Then
                            If Not lvarRow2.Selected Then
                                dgvWaga.Rows.Remove(lvarRow)
                                Exit For
                            Else
                                Exit For
                            End If
                        End If
                    Next
                Next
                If dgvDrutRodzic.SelectedRows.Count = 1 AndAlso dgvDrutRodzic.SelectedRows(0).Cells("colRodzicNumer").Value.ToString() <> dgvWaga.Rows(0).Cells("colWagaNumer").Value.ToString() Then
                    dgvWaga.Rows.Clear()
                    DodanieDoDgvWagi()
                End If
            End If
        Else
            MessageBox.Show("Nie ma drutu.", "WIREMET")
        End If
    End Sub

    Private Sub dgvDrutPotomek_CellMouseClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles dgvDrutPotomek.CellMouseClick

        Dim lvarWaga As Double
        Dim lvarIdRodzic As String
        Wyczysc()
        dgvDrutRodzic.ClearSelection()
        cmdDodaj.Enabled = False

        lvarIdRodzic = clsTrSzukanie.SzukajIdDrutu(mvarDbHolder, CType(dgvDrutPotomek.SelectedRows(0).Tag, clsInhTrDrut).Id.ToString())


        If dgvDrutPotomek.Rows.Count > 0 Then

            Dim lvarIndex As Integer
            Dim lvarWsp As Integer = 0
            AktywnoscGrbDaneMaszyny()
            If UCase(Trim(txtMaszyna.Text)) = "PIEC" Then
                txtTemperatura.Text = Replace(CType(dgvDrutPotomek.SelectedRows(0).Tag, clsInhTrDrut).ParametrMaszyny, ".", ",")
            Else
                txtPredkoscMaszyny.Text = Replace(CType(dgvDrutPotomek.SelectedRows(0).Tag, clsInhTrDrut).ParametrMaszyny, ".", ",")
            End If
            lvarIndex = cmbPracownik.FindString(CType(dgvDrutPotomek.SelectedRows(0).Tag, clsInhTrDrut).Pracownik.Nazwisko)
            cmbPracownik.SelectedIndex = lvarIndex
            lvarIndex = cmbMaszyna.FindString(CType(dgvDrutPotomek.SelectedRows(0).Tag, clsInhTrDrut).Maszyna.Nazwa)
            cmbMaszyna.SelectedIndex = lvarIndex
            lvarIndex = cmbPakowanie.FindString(CType(dgvDrutPotomek.SelectedRows(0).Tag, clsInhTrDrut).Pakowanie.Nazwa)
            cmbPakowanie.SelectedIndex = lvarIndex
            txtWymiarMax.Text = Replace(CType(dgvDrutPotomek.SelectedRows(0).Tag, clsInhTrDrut).WymiarMax, ".", ",")
            txtWymiarMin.Text = Replace(CType(dgvDrutPotomek.SelectedRows(0).Tag, clsInhTrDrut).WymiarMin, ".", ",")
            txtUwagi.Text = CType(dgvDrutPotomek.SelectedRows(0).Tag, clsInhTrDrut).Uwagi

            For Each lvarRodzic As clsTrRodzic In CType(dgvDrutPotomek.SelectedRows(0).Tag, clsInhTrDrut).Rodzic
                For I As Integer = 0 To dgvDrutRodzic.Rows.Count - 1
                    If CInt(dgvDrutRodzic.Rows(I).Cells("colRodzicNumer").Value) = lvarRodzic.DrutRodzicId Then
                        dgvWaga.Rows.Add(dgvDrutRodzic.Rows(I).Cells("colRodzicNumer").Value, Replace(lvarRodzic.Waga, ".", ","), dgvDrutRodzic.Rows(I).Cells("colRodzicAktualnaWaga").Value, Replace(lvarRodzic.Waga, ".", ","))
                        dgvWaga.Rows(dgvWaga.Rows.Count - 1).Tag = dgvDrutRodzic.Rows(I).Tag
                        lvarWaga = lvarWaga + CDbl(Replace(lvarRodzic.Waga, ".", ","))
                    End If
                Next
                grbWaga.Text = "waga szpuli " & lvarWaga & " kg"
                For Each lvarRow As DataGridViewRow In dgvDrutRodzic.Rows
                    If CInt(lvarRow.Cells("colRodzicNumer").Value) = lvarRodzic.DrutRodzicId Then
                        lvarRow.Selected = True
                        If lvarRow.Index > 3 Then
                            dgvDrutRodzic.FirstDisplayedScrollingRowIndex = CInt(lvarRow.Index) - 3
                        Else
                            dgvDrutRodzic.FirstDisplayedScrollingRowIndex = 0
                        End If
                    End If
                Next
            Next
            Select Case CType(dgvDrutPotomek.SelectedRows(0).Tag, clsInhTrDrut).OpcjaId
                Case 1
                    chkProdukcja.Checked = True
                Case 2
                    chkMagazyn.Checked = True
                Case 3
                    chkKosz.Checked = True
                Case 4
                    chkKontrola.Checked = True
            End Select

            If mvarStatusId = 6 Then
                dgvDrutRodzic.Enabled = False
                grbInformacje.Enabled = False
            Else
                dgvDrutRodzic.Enabled = True
                grbInformacje.Enabled = True
            End If
        End If
        '  lvarIdRodzic <> String.Empty Or 
        If CType(dgvDrutPotomek.SelectedRows(0).Tag, clsInhTrDrut).Kontrola.Id <> 0 Then
            MsgBox("Wybranego drutu nie można już edytować.")
            grbPrzyciski.Enabled = False
        End If
    End Sub

#Region "Checked"

    Private Sub dgvDrutRodzic_SelectionChanged(sender As Object, e As EventArgs) Handles dgvDrutRodzic.SelectionChanged

        If dgvDrutRodzic.SelectedRows.Count = 1 And dgvWaga.Rows.Count = 1 Then
            If dgvDrutRodzic.SelectedRows(0).Cells("colRodzicNumer").Value.ToString() <> dgvWaga.Rows(0).Cells("colWagaNumer").Value.ToString() Then
                For Each lvarRow As DataGridViewRow In dgvDrutRodzic.Rows
                    If CInt(lvarRow.Cells("colRodzicNumer").Value) = CInt(dgvWaga.Rows(0).Cells("colWagaNumer").Value) Then
                        lvarRow.Cells("colRodzicAktualnaWaga").Value = CDbl(lvarRow.Cells("colRodzicAktualnaWaga").Value) + CDbl(dgvWaga.Rows(0).Cells("colWagaIlosc").Value)
                        mvarZmianaWagi = True
                    End If
                Next
                dgvWaga.Rows.Clear()
                If CDbl(dgvDrutRodzic.SelectedRows(0).Cells("colRodzicAktualnaWaga").Value) <> 0 Then
                    DodanieDoDgvWagi()
                End If
            End If
        End If

    End Sub

    Private Sub chkProdukcja_CheckedChanged(sender As Object, e As EventArgs) Handles chkProdukcja.CheckedChanged
        If chkProdukcja.Checked Then
            chkMagazyn.Checked = False
            chkKosz.Checked = False
            chkKontrola.Checked = False
        End If
    End Sub

    Private Sub chkMagazyn_CheckedChanged(sender As Object, e As EventArgs) Handles chkMagazyn.CheckedChanged
        If chkMagazyn.Checked Then
            chkProdukcja.Checked = False
            chkKosz.Checked = False
            chkKontrola.Checked = False
        End If
    End Sub

    Private Sub chkKosz_CheckedChanged(sender As Object, e As EventArgs) Handles chkKosz.CheckedChanged
        If chkKosz.Checked Then
            chkProdukcja.Checked = False
            chkMagazyn.Checked = False
            chkKontrola.Checked = False
        End If
    End Sub


    Private Sub chkKontrola_CheckedChanged(sender As Object, e As EventArgs) Handles chkKontrola.CheckedChanged
        If chkKontrola.Checked Then
            chkProdukcja.Checked = False
            chkMagazyn.Checked = False
            chkKosz.Checked = False
        End If
    End Sub

#End Region


    Private Sub frmOperacja2_Load(sender As Object, e As EventArgs) Handles Me.Load
        If dgvDrutRodzic.Rows.Count > 0 Then
            dgvDrutRodzic.ClearSelection()
        End If
        If dgvDrutPotomek.Rows.Count > 0 Then
            dgvDrutPotomek.ClearSelection()
        End If
    End Sub

    Private Sub frmOperacja_FormClosed(sender As Object, e As FormClosedEventArgs) Handles MyBase.FormClosed

        For Each lvarPozycja As clsInhTrPozycjeSchematu In mvarPozycjaSchematu
            If dgvDrutRodzic.Rows.Count > 0 And lvarPozycja.StatusId = 1 Then
                lvarPozycja.StatusId = 2
                mvarDbHolder.BeginTrans()
                lvarPozycja.Save(mvarDbHolder)
                mvarDbHolder.CommitTrans()
            End If
        Next

        If Not mvarWyznTylkoDoOdczytu Then
            mvarBlokowanie.Unlock()
        End If
        mvarDbHolder.Close()
        unitOfWork.Dispose()
    End Sub


    Function WyrazenieMatematyczna(lvarIndex As Integer) As Double

        Dim lvarText As String
        Dim lvarText1 As String
        Dim lvarText2 As String
        Dim lvarIn As Integer
        Dim lvarWartosc As Double = 0

        lvarText = CStr(dgvWaga.Rows(lvarIndex).Cells("colWagaIlosc").Value)
        lvarIn = InStr(lvarText, "-")
        If lvarIn <> 0 Then
            lvarText1 = Trim(Microsoft.VisualBasic.Left(lvarText, lvarIn - 1))
            lvarText2 = Trim(Microsoft.VisualBasic.Right(lvarText, lvarText.Length - lvarIn))
            lvarWartosc = CDbl(lvarText1) - CDbl(lvarText2)

        End If

        If lvarWartosc < 0 Then
            lvarWartosc = 0
        End If

        Return lvarWartosc

    End Function


    Private Sub dgvDrutRodzic_KeyPress(sender As Object, e As KeyPressEventArgs) Handles dgvDrutRodzic.KeyPress

        If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Return) Then
            Dim lvarIndex As Integer


            If dgvDrutRodzic.SelectedRows.Count > 0 And dgvDrutRodzic.SelectedRows.Count > dgvWaga.Rows.Count Then
                Select Case dgvDrutRodzic.SelectedRows.Count
                    Case 1
                        Wyczysc()
                        If mvarPracownikId <> 0 Then
                            For I As Integer = 0 To cmbPracownik.Items.Count - 1
                                If CInt(CType(cmbPracownik.Items(I), clsPracownik).Numer) = mvarPracownikId Then
                                    cmbPracownik.SelectedIndex = I
                                    Exit For
                                End If
                            Next
                        Else
                            lvarIndex = cmbPracownik.FindString(mvarUzytkownik.Nazwisko)
                            cmbPracownik.SelectedIndex = lvarIndex
                        End If
                        lvarIndex = cmbMaszyna.FindString(txtMaszyna.Text)
                        cmbMaszyna.SelectedIndex = lvarIndex
                        lvarIndex = cmbPakowanie.FindString(txtOpakowanie.Text)
                        cmbPakowanie.SelectedIndex = lvarIndex
                        AktywnoscGrbDaneMaszyny()
                        'waga
                        DodanieDoDgvWagi()
                    Case Is > 1
                        DodanieDoDgvWagi()
                End Select
            ElseIf dgvDrutRodzic.SelectedRows.Count < dgvWaga.Rows.Count Then 'dgvDrutRodzic.SelectedRows.Count > 0 And 

                For Each lvarRow As DataGridViewRow In dgvWaga.Rows
                    '  MessageBox.Show("waga " & lvarRow.Cells("colWagaNumer").Value)
                    For Each lvarRow2 As DataGridViewRow In dgvDrutRodzic.Rows
                        '   MessageBox.Show("Rodzic " & lvarRow2.Cells("colRodzicNumer").Value)
                        If CInt(lvarRow2.Cells("colRodzicNumer").Value) = CInt(lvarRow.Cells("colWagaNumer").Value) Then
                            If Not lvarRow2.Selected Then
                                dgvWaga.Rows.Remove(lvarRow)
                                Exit For
                            Else
                                Exit For
                            End If
                        End If
                    Next
                Next
                If dgvDrutRodzic.SelectedRows.Count = 1 AndAlso dgvDrutRodzic.SelectedRows(0).Cells("colRodzicNumer").Value.ToString() <> dgvWaga.Rows(0).Cells("colWagaNumer").Value.ToString() Then

                    dgvWaga.Rows.Clear()
                    DodanieDoDgvWagi()
                End If


            End If
        End If
    End Sub

#Region "KeyPress"

    Private Sub cmbMaszyna_KeyPress(sender As Object, e As KeyPressEventArgs) Handles cmbMaszyna.KeyPress
        If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Return) Then
            If UCase(txtMaszyna.Text) = "PIEC" Then
                txtTemperatura.Focus()
            Else
                txtPredkoscMaszyny.Focus()
            End If
        End If
    End Sub

    Private Sub txtTemperatura_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtTemperatura.KeyPress
        If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Return) Then
            cmbPracownik.Focus()
        End If
    End Sub

    Private Sub txtPredkoscMaszyny_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtPredkoscMaszyny.KeyPress
        If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Return) Then
            cmbPracownik.Focus()
        End If
    End Sub

    Private Sub cmbPracownik_KeyPress(sender As Object, e As KeyPressEventArgs) Handles cmbPracownik.KeyPress
        If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Return) Then
            cmbPakowanie.Focus()
        End If
    End Sub

    Private Sub cmbPakowanie_KeyPress(sender As Object, e As KeyPressEventArgs) Handles cmbPakowanie.KeyPress
        If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Return) Then
            txtWymiarMin.Focus()
        End If
    End Sub

    Private Sub txtWymiarMin_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtWymiarMin.KeyPress
        If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Return) Then
            txtWymiarMax.Focus()
        End If
    End Sub

    Private Sub txtWymiarMax_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtWymiarMax.KeyPress
        If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Return) Then
            chkProdukcja.Focus()
        End If
    End Sub

    Private Sub chkProdukcja_KeyPress(sender As Object, e As KeyPressEventArgs) Handles chkProdukcja.KeyPress
        If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Return) Then
            chkProdukcja.Checked = True
            chkMagazyn.Focus()
        End If
    End Sub

    Private Sub chkMagazyn_KeyPress(sender As Object, e As KeyPressEventArgs) Handles chkMagazyn.KeyPress
        If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Return) Then
            chkMagazyn.Checked = True
            chkKosz.Focus()
        End If
    End Sub

    Private Sub chkKosz_KeyPress(sender As Object, e As KeyPressEventArgs) Handles chkKosz.KeyPress
        If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Return) Then
            chkKosz.Checked = True
            chkKontrola.Focus()
        End If
    End Sub

    Private Sub chkKontrola_KeyPress(sender As Object, e As KeyPressEventArgs) Handles chkKontrola.KeyPress
        If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Return) Then
            chkKontrola.Checked = True
            dgvWaga.Focus()
        End If
    End Sub

    Private Sub txtUwagi_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtUwagi.KeyPress
        If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Return) Then
            cmdDodaj.Focus()
        End If
    End Sub

#End Region

    Private Sub cmdZakonczOperacje_Click(sender As Object, e As EventArgs) Handles cmdZakonczOperacje.Click

        Dim confirmationDialogResult = MessageBox.Show("Czy na pewno chcesz zakończyć operację?", "Uwaga", MessageBoxButtons.YesNo, MessageBoxIcon.Warning)
        If confirmationDialogResult = Windows.Forms.DialogResult.Yes Then

            'sprawdzenie czy poprzednia operacja jest zamknieta

            Dim lvarSchemat As clsInhTrSchemat
            Dim lvarPozycjaPrzed As clsInhTrPozycjeSchematu

            For Each lvarPozycja As clsInhTrPozycjeSchematu In mvarPozycjaSchematu


                lvarSchemat = New clsInhTrSchemat(CInt(lvarPozycja.SchematId), mvarDbHolder)

                For Each lvar As clsInhTrPozycjeSchematu In lvarSchemat.PozycjeSchematu
                    If lvar.Id = lvarPozycja.Id Then
                        Exit For
                    Else
                        lvarPozycjaPrzed = lvar
                    End If
                Next

                If lvarPozycjaPrzed.StatusId = 4 And lvarPozycjaPrzed.OpcjaPozycjiSchematuId = 1 Then
                    lvarPozycja.StatusId = 6
                    mvarDbHolder.BeginTrans()
                    lvarPozycja.Save(mvarDbHolder)
                    mvarDbHolder.CommitTrans()
                    MsgBox("Operacja zakończona.")
                    grbInformacje.Enabled = False
                    cmdZakonczOperacje.Enabled = False
                    Me.Text = "Operacja - zakończona"
                ElseIf lvarPozycjaPrzed.StatusId = 6 And lvarPozycjaPrzed.OpcjaPozycjiSchematuId <> 1 Then
                    lvarPozycja.StatusId = 6
                    mvarDbHolder.BeginTrans()
                    lvarPozycja.Save(mvarDbHolder)
                    mvarDbHolder.CommitTrans()
                    MsgBox("Operacja zakończona.")
                    grbInformacje.Enabled = False
                    cmdZakonczOperacje.Enabled = False
                    Me.Text = "Operacja - zakończona"
                Else
                    MsgBox("Nie można zakończyć danej operacji, ponieważ poprzednie nie są zakończone.")
                End If

            Next

        End If
    End Sub



    Private Sub SetLabelIloscDrutu()

        Dim pozycjaSchematuRepository As New Repository(Of PozycjaSchematu)(unitOfWork)
        Dim pozycjaSchematuIdSpecification As New IdSpecification(Of PozycjaSchematu)(mvarPozycjaSchematuId)
        Dim pozycjaSchematu As PozycjaSchematu = pozycjaSchematuRepository.GetEntityMatching(pozycjaSchematuIdSpecification)
        Dim dobryDrutOpcjaId As New HashSet(Of Integer)({1, 4, 6, 8})


        Dim wagaCalkowitaDrutu As Decimal = CDec(pozycjaSchematu.Druty.Values.SelectMany(Function(x) x.Rodzice).Sum(Function(x) x.Waga))
        'Dim wagaGotowegoDrutu As Decimal = pozycjaSchematu.Druty.Where(Function(x) x.Opcja.Id = 4).SelectMany(Function(x) x.Rodzice).Select(Function(x) x.Waga).Sum()
        'Dim wagaGotowegoDrutu As Decimal = pozycjaSchematu.Druty.Where(Function(x) x.Kontrola.Any() AndAlso x.Kontrola.First().Opcja.Id = 6).SelectMany(Function(x) x.Rodzice).Select(Function(x) x.Waga).Sum()
        'Dim wagaGotowegoDrutu As Decimal = pozycjaSchematu.Druty.SelectMany(Function(x) x.Rodzice).SelectMany(Function(x) x.Potomkowie).Where(Function(x) x.Drut.PozycjaSchematu.Schemat.Id = pozycjaSchematu.Schemat.Id AndAlso dobryDrutOpcjaId.Contains(x.Drut.Opcja.Id)).Sum(Function(x) x.Waga)

        lbl_IloscDrutu.Text = wagaCalkowitaDrutu & " / " & txtIlosc.Text

    End Sub

End Class